package com.huangdebiao.oa.service.impl;

import com.huangdebiao.oa.dao.RoleDao;
import com.huangdebiao.oa.entity.RoleEntity;
import com.huangdebiao.oa.service.RoleService;
import com.huangdebiao.oa.utils.DaoFactory;



import java.util.List;

public class RoleServiceImpl implements RoleService {


    private DaoFactory<RoleDao> roleDaoFactory = new DaoFactory<>();

    /**
     * 用于查询的roleDao，不提交事务
     */
    private RoleDao roleDao;

    private RoleDao roleDaoCommit;

    {
        roleDao = roleDaoFactory.getDao(RoleDao.class);
        roleDaoCommit = roleDaoFactory.getDaoTransaction(RoleDao.class);

    }

    /**
     * 查询所有角色
     * @return
     */
    @Override
    public List<RoleEntity> findAllRole() {
        return roleDaoCommit.findAllRole();
    }

    /**
     * 通过角色名称添加角色
     * @param roleName
     * @return 1则成功添加，0则添加失败，因为角色已经存在
     */
    @Override
    public Integer addRole(String roleName) {
        Integer integer = checkRole(roleName);
        if (integer == 0){
            return roleDao.addRole(roleName);
        }else {
            return 0;
        }
    }

    /**
     * 通过角色名称查询是否存在于数据库
     * @param roleName
     * @return 1则已存在，0则不存在
     */
    @Override
    public Integer checkRole(String roleName) {
        return roleDao.checkRole(roleName);
    }

    /**
     * 通过新角色名字修改旧角色名字
     * @param oldName
     * @param newName
     * @return 返回0，则修改失败（新的角色名称已经存在于数据库 或 新的角色名称和旧的角色名称一致，无需修改）
     */
    @Override
    public Integer updateRoleNameByOldRoleName(String oldName, String newName) {
        // 查询新的角色是否存在
        Integer flag = roleDao.checkRole(newName);

        // 如果查询出来，角色名字存在，则直接返回0
        if (flag != 0){
            return 0;
        }else {
            // 如果新名字和就
            if (oldName.equals(newName)){
                return 0;
            }else {
                roleDaoCommit.updateRoleNameByOldRoleName(oldName,newName);
                return 1;
            }
        }
    }
}
